package com.liang.service.impl;


import com.liang.mapper.MenuDAO;
import com.liang.pojo.Menu;
import com.liang.service.MenuService;
import com.liang.utils.DateUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

/**
 *@作者:lsk
 *Service实现类
 *@Date:2023/07/13
*/
@Service
public class MenuServiceImpl implements MenuService {


	@Resource
	private MenuDAO menudao;


	/**
	根据MenuId查询
	*/
	public Object selectByMenuId(Integer menuId){
		return menudao.selectByMenuId(menuId);
	}


	/**
	根据MenuId更新
	*/
	public Integer updateByMenuId(Menu demo){
		if(demo.getMenuId() == null){
			return 0;
		}
		demo.setMenu_updatetime(DateUtils.getTodayDateTime());
		return menudao.updateByMenuId( demo);
	}



	/**
	根据MenuId删除
	*/
	public Integer deleteByMenuId(Integer menuId){
		if(menuId == null){
			return 0;
		}
		Map map = new HashMap<String,Object>();
		map.put("parentId",menuId);
		List<Menu> list = menudao.selectList(map);
		list.forEach(menu -> {
			menudao.deleteByMenuId(menu.getMenuId());
		} );
		return menudao.deleteByMenuId(menuId);
	}



    private Map map = new HashMap<Integer,String>(){
        {
            put(0, "新增");put(1, "修改");put(2, "删除");
        }
    };

	/**
	 insert:(插入)
	*/
	public Object insert(Menu demo){
		demo.setMenu_creattime(DateUtils.getTodayDateTime());
		menudao.insert(demo);

//		List<Menu> list = new ArrayList<>();
//		for(int i = 0 ; i < 5; i++){
//		    Menu menu = new Menu();
//		    menu.setMenuName(map.get(i).toString());
//		    menu.setMenuRouter("" + i);
//		    menu.setMenuStatus(1);
//		    menu.setMenuType(1);
//		    menu.setParentId(demo.getMenuId());
//		    list.add(menu);
//        }
//        menudao.insertBatch(list);
		return demo;
	}



	/**
	 insertOrUpdate(插入或更新(根据主键或唯一索引更新，主键和唯一索引不会改变))
	*/
	public Integer insertOrUpdate(Menu demo){
		return menudao.insertOrUpdate(demo);
	}



	/**
	 insertBath:(批量插入)
	*/
	public Integer insertBatch(List<Menu> list){
		return menudao.insertBatch(list);
	}



	/**
	 insertOrUpdateBatch:(批量插入或更新)
	*/
	public Integer insertOrUpdateBatch(List<Menu> list){
		return menudao.insertOrUpdateBatch(list);
	}



	/**
	 selectList:(根据参数查询集合)
	*/
	public List<Menu> selectList(Map<String,Object> param){
	    if(param.get("pageNum") != null){
            int start = Integer.parseInt(param.get("pageSize").toString()) * (Integer.parseInt(param.get("pageNum").toString()) - 1);
            param.put("pageNum",start);
        }
        List<Menu> list = menudao.selectList(param);
        List<Menu> menusList = list.stream().filter(menu ->
                menu.getParentId() ==0
        ).map((menu) ->{
            menu.setMenuList(getChildCategory(menu,list));
            return menu;
        }).collect(Collectors.toList());
        return menusList;
	}

    private List<Menu> getChildCategory(Menu father,List<Menu> all) {
        List<Menu> child = all.stream().filter(menu -> {
            return menu.getParentId().equals(father.getMenuId());
        }).map(menu -> {
            //递归找子菜单
            menu.setMenuList(getChildCategory(menu, all));
            return menu;
        }).collect(Collectors.toList());
        return child;
    }


	/**
	 selectCount:(根据集合查询数量)
	*/
	public Long selectCount(Map<String,Object> param){
		return menudao.selectCount(param);
	}



}